DQL(Data Query Language)과 키워드
✒️ 2025-06-05 18:16 내용 수정
수제비 2024 정보처리기사 필기 5판 1권의 내용 일부를 참고하여 정리
참고 자료 : wikipedia Data query language, 류예린's MySQL 기초 DQL 과정
DQL(Data Query Language)
데이터베이스의 데이터를 조회 및 검색하는 명령어
- QUERY : 문의, 의문, 질의라는 사전적 의미를 가지고 있다. 컴퓨터 용어에서는 파일의 내용 등을 알기 위해 몇 개의 code나 key를 기초로 질의하는 것을 말한다.
- 분류상 DML에 속하기도 한다.
SELECT
- 데이터를 조회한다.
- WHERE 조건절을 이용해서 조건에 맞는 데이터를 조회할 수 있다.
- SQL 함수를 사용할 때 Oracle에서 제공하는 가상 테이블 DUAL과 함께 사용한다.
SELECT 컬럼명1, 컬럼명2, ... FROM 테이블명;
SELECT 컬럼명1, 컬럼명2, ... FROM 테이블명 WHERE 조건식;
- 키워드들을 포함한 명령어 구조는 아래와 같다.
SELECT [ALL | DISTINCT] 속성1, 속성2, .. FROM 테이블명1, ..
[WHERE 조건]
[GROUP BY 속성1, 속성2, ..]
[HAVING 그룹조건]
[ORDER BY 속성 [ASC | DESC]];
DQL과 DML에서 사용하는 표현들
- DQL의 SELECT문에서 많이 사용하며, DML의 UPDATE문이나 DELETE문에서도 사용한다.
- DML(Data Manipulation Language) 참고.
- 상세 예시는 Data 검색 참고.
1. WHERE 조건절
- WHERE 조건절은
WHERE 조건식형식으로 사용한다.- 조건식은
컬럼명 연산자 문자/숫자/표현식으로 작성한다.- 연산자는 SQL 연산자 참고.
- JOIN을 사용하면 비교 칼럼명을 작성한다.
- 조건식은
WHERE 컬럼이름 연산자 표현식
| 연산자 | 설명 |
|---|---|
| > , < | 초과, 미만 |
| >= , <= | 이상, 이하 |
| = | 같음 |
| < > , != , ^= | 같지 않음 |
| AND | 두 조건식이 모두 참일 때 ( && 역할) |
| OR | 둘 중 하나가 참일 때 ( || 역할) |
-- 예시
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 > 비교값; -- <
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 >= 비교값; -- <=
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 = 비교값;
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 = 비교값 AND 컬럼명 > 비교값;
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 != 비교값 OR 컬럼명 > 비교값;
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 IN NULL;
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 IN NOT NULL;
2. CASE문
- Java의 Switch, 삼항 연산자와 비슷하게 특정 조건에 맞을 때 원하는 값을 출력하도록 설정할 수 있다.
- 조건문#2. switch 참고.
- Oracle은 PL/SQL에서도 사용 가능하고, Oracle, MySQL, PostgreSQL 모두 CASE문을 지원한다.
- PL/SQL CASE문 참고.
- 데이터의 값을 WHEN 조건과 차례로 비교하여 일치하는 값을 THEN 이후의 형태로 리턴하고, WHEN 조건과 일치하지 않으면 ELSE 이후의 형태로 리턴한다.
- 만약 WHEN 뒤의 조건 중 참인 것이 두 개 이상이라면 먼저 만나는 조건을 선택하여 판별한다.
- ELSE는 생략 가능하며, ELSE가 생략되어 있고 WHEN 조건에도 맞지 않는 데이터가 있을 때 CASE문은 NULL을 반환한다.
- CASE문이 끝나면 반드시 END를 작성해서 CASE문이 끝났음을 표시해야 한다.
- CASE 문 전체는 하나의 값으로 인식되어 값이 올 수 있는 모든 위치에 올 수 있으며, SELECT나 WHERE 절 조건문에도 사용할 수 있다.
- CASE문으로 생성된 컬럼은 테이블 자체를 변경하는 동작이 아닌 읽기 전용 테이블을 새로 생성하며, 이는 VIEW이다.
-- WHEN 조건이 1개일 때
SELECT 컬럼명,
CASE WHEN 조건1 THEN 참1
ELSE 거짓1
END AS 컬럼별칭
FROM 테이블명;
-- WHEN 조건이 여러 개일 때
SELECT 컬럼명,
CASE WHEN 조건1 THEN 참1
WHEN 조건2 THEN 참2
ELSE 거짓2
END AS 컬럼별칭
FROM 테이블명;
SELECT name, score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
WHEN score IS NULL THEN 'N/A'
ELSE 'F'
END AS grade
FROM student;

3. ORDER BY
- SQL로 검색한 데이터들을 특정 기준으로 정렬하여 출력할 때 사용한다.
- SELECT 절에서 사용할 때 가장 마지막에 기술한다. (데이터를 먼저 다 골라내고 그 다음 정렬이 필요함)
- 기본적으로 ASC(오름차순) 정렬이며, DESC(내림차순) 정렬도 가능하다.
- 조건이 여러 개 존재할 때는 가장 큰 정렬 조건부터 순차적으로 작은 정렬 조건 순으로 작성한다.
- ex) 학생 목록을 정렬할 때 학년 순으로 정렬하고, 학년이 같다면 반 순서대로 정렬하고, 반이 같다면 학생 번호 순으로 정렬한다.
SELECT 컬럼명 FROM 테이블명 ORDER BY 조건문 정렬옵션;
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 조건문 ORDER BY 조건문 정렬옵션;
SELECT user_id FROM users ORDER BY user_id DESC;
- PostgreSQL과 Oracle DB에선
NULLS FIRST나NULLS LAST를 사용하여NULL값의 정렬 순서를 지정할 수 있다.
ORDER BY user_id NULLS FIRST -- NULL값 먼저
ORDER BY user_id NULLS LAST -- NULL값은 나중에
4. AS(ALIAS)
- column이나 테이블의 별칭을 지정할 때 사용한다.
- 별칭은 해당 QUERY가 지속되는 동안에만 유지된다.
- 참고 자료 : W3School SQL AS Keyword
-- column에 별칭 지정
SELECT 컬럼명1 AS 별칭1, 컬럼명2 AS 별칭2, ...
FROM 테이블명;
-- 테이블에 별칭 지정
SELECT 컬럼명1, 컬럼명2, ...
FROM 테이블명 AS 별칭;
-- EMPLOYEES 테이블 사용
SELECT FIRST_NAME||'의 직종은 '||JOB_ID||'이다.' AS "JOB"
FROM EMPLOYEES;